﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Windows.Forms;
using UricaoWeb.LogicaDeNegocios.Menu;

namespace UricaoWeb.Presentacion
{
    public partial class API_menu_ModificarPlato : API_Seguridad_Principal
    {

        Plato platoModificar = new Plato();
        private string respaldoImagen;
        private bool _switchActivo;
        private int _error = 1;
        private static string _mensajeError;


        ///<sumary>
        ///Metodo por defecto cuando carga la pagina
        ///Parámetros:
        ///sender: objeto obtenido
        ///e: evento
        ///Retorno: (no posee)
        ///Excepeciones: (no posee)
        ///</sumary>
        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();
            if (!IsPostBack)
            {
                platoModificar = cargarDatos(API_menu_BuscarPlato.platoModificar.IdPlato);
                desparcerLabels();
                LMensaje.Visible = false;
            }
        }


        ///<sumary>
        ///Metodo para mostrar al usuario la informacion de sus campos 
        ///Parámetros:
        ///idPlatoP: id del plato, para cargar su informacion
        ///Retorno:
        ///Plato: el plato con sus campos
        ///Excepeciones: (no posee)
        ///</sumary>
        public Plato cargarDatos(int idPlatoP)
        {
            Plato plato = new Plato();
            plato = NegocioMenu.ObtenerTodosPlatos(idPlatoP);
            TBNombre.Text = plato.NombrePlato;
            TBCosto.Text = plato.PrecioPlato.ToString();
            ImagenPlato.ImageUrl = "~/Presentacion/images/" + plato.FotoPlato;
            respaldoImagen = plato.FotoPlato;
            TADetalles.Text = plato.DetallePlato;
            if (plato.CompartirPlato == true)
                RBCompartido.Checked = true;
            else
                RBIndividual.Checked = true;

            if (plato.ActivoPlato == true)
            {
                this.InputValue = "checked";
            }
            else
                this.InputValue = "";

            return plato;

        }

        public Plato cargarDatosFotos(int idPlatoP)
        {
            Plato plato = new Plato();
            plato = NegocioMenu.ObtenerTodosPlatos(idPlatoP);

            ImagenPlato.ImageUrl = "~/Presentacion/images/" + plato.FotoPlato;
            return plato;


        }

        ///<sumary>
        ///Metodo para desaparecer labels de error
        ///Parámetros: (no posee)
        ///Retorno: (no posee)
        ///Excepeciones: (no posee)
        ///</sumary>
        public void desparcerLabels()
        {
            LNombre.Visible = false;
            LCosto.Visible = false;
            LDetalles.Visible = false;
            LImagen.Visible = false;
            LTipo.Visible = false;
        }

        ///<sumary>
        ///Metodo para buscar cuales campos estan vacios
        ///Parámetros:(no posee)
        ///Retorno: (no posee)
        ///Excepeciones: (no posee)
        ///</sumary>
        public void buscarCamposVacios()
        {

            if (this.TBNombre.Text == "")
                LNombre.Visible = true;
            else
                LNombre.Visible = false;

            if (this.TBCosto.Text == "")
                LCosto.Visible = true;
            else
                LCosto.Visible = false;

            if (this.TADetalles.Text == "")
                LDetalles.Visible = true;
            else
                LDetalles.Visible = false;

            if (this.RBCompartido.Checked == false && this.RBIndividual.Checked == false)
                LTipo.Visible = true;
            else
                LTipo.Visible = false;

            if (this.ImagenPlato.ImageUrl == "")
                LImagen.Visible = true;
            else
                LImagen.Visible = false;
        }

        ///<sumary>
        ///Metodo para buscar solo la foto de un plato
        ///Parámetros: el id del plato para buscar su foto
        ///Retorno:
        ///string: con el nombre de la foto
        ///Excepeciones: (no posee)
        ///</sumary>
        public string buscarFoto(int idPlatoP)
        {
            Plato plato = new Plato();
            plato = NegocioMenu.ObtenerTodosPlatos(idPlatoP);
            return plato.FotoPlato;
        }


        ///<sumary>
        ///Metodo para actualizar los datos de los platos
        ///Parámetros: el id del plato para buscar su foto
        ///Retorno:
        ///Plato: objeto con la informacion de los platos actuales, una vez que usuario los haya cambiado
        ///Excepeciones: (no posee)
        ///</sumary>
        public Plato actualizarDatos()
        {
            Plato plato = new Plato();
            plato.IdPlato = API_menu_BuscarPlato.platoModificar.IdPlato;
            plato.NombrePlato = TBNombre.Text;
            plato.PrecioPlato = float.Parse(TBCosto.Text);
            if (FUImagen.FileName != "")
                plato.FotoPlato = FUImagen.FileName;
            else
                plato.FotoPlato = buscarFoto(API_menu_BuscarPlato.platoModificar.IdPlato);
            plato.DetallePlato = TADetalles.Text;
            if (RBCompartido.Checked == true)
                plato.CompartirPlato = true;
            else
                plato.CompartirPlato = false;
            if (this._switchActivo == true)
            {
                this.InputValue = "checked";
            }
            else
                this.InputValue = "";
            return plato;

        }


        ///<sumary>
        ///Metodo para guardar imagenes con file upload
        ///Parámetros:
        ///file: contiene el archivo que se desea guardar en la carpeta
        ///Retorno: (no posee)
        ///Excepeciones: (no posee)
        ///</sumary>
        void SaveFile(HttpPostedFile file)
        {
            // Especefica la ruta para salvar el archivo
            string savePath = "c:\\GestionDeHoteles\\UricaoWeb\\Presentacion\\images\\";

            // Obtiene el nombre del archivo a modificar
            string fileName = FUImagen.FileName;

            //Crea la ruta completa (ruta de carpeta + nombrearchivo.extension
            string pathToCheck = savePath + fileName;

            // Crea temporalmente un archivo para verificar si ya existen archivos con la misma ruta
            string tempfileName = "";

            //Chequea si exite un archivo con el mismo nombre   
            try
            {
                if (System.IO.File.Exists(pathToCheck))
                {
                    int counter = 2;
                    while (System.IO.File.Exists(pathToCheck))
                    {
                        // if a file with this name already exists,
                        // prefix the filename with a number.
                        tempfileName = counter.ToString() + fileName;
                        pathToCheck = savePath + tempfileName;
                        counter++;
                    }
                    //si exite el archivo se crea con el mismo nombre pero agregando un numero por delante
                    fileName = tempfileName;
                }

                // Actualiza el nombre del archivo, en caso que se haya cambiado
                savePath += fileName;

                //Llama al metodo para salvar el archivo con la ruta definitiva
                FUImagen.SaveAs(savePath);
            }
            catch (Exception e)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "redirect script", //aca se coloca el codigo del error
                           "alert('Error al guardar la imagen'); location.href='API_menu_CrearPlato.aspx';", true);
                _error = 0;
            }

        }
        ///<sumary>
        ///Metodo para obtener y setear el valor del switch
        ///Parámetros: (no posee)
        ///Retorno:
        ///string: con el valor de seteo.
        ///Excepeciones: (no posee)
        ///</sumary>
        protected string InputValue { get; set; }



        ///<sumary>
        ///Metodo para validar y actualizar los valores del usuario
        ///Parámetros:
        ///sender: obtiene el objeto a que se le hacer referencia
        ///e: contiene el evento
        ///Retorno: (no posee)
        ///Excepeciones: (no posee)
        ///</sumary>
        protected void BAceptar_Click1(object sender, EventArgs e)
        {
            bool validaRB = false;
            if (RBCompartido.Checked == true || RBIndividual.Checked == true)
                validaRB = true;

            //validar el switch
            if (Request.Form["onoffswitch"] == "on")
                _switchActivo = true;
            else
                _switchActivo = false;

            //Valida si la imagen ya tiene algo, y presiona aceptar deberia dejar lo que esta en la BD
            if (FUImagen.FileName != "")
                platoModificar.FotoPlato = FUImagen.FileName;
            else
                platoModificar.FotoPlato = buscarFoto(API_menu_BuscarPlato.platoModificar.IdPlato);

            if ((NegocioMenu.validarFloatCosto(this.TBCosto.Text) == true) && (NegocioMenu.validarTieneCamposVaciosPlatos(this.TBNombre.Text, this.TBCosto.Text, platoModificar.FotoPlato, this.TADetalles.Text, validaRB) == false) && (NegocioMenu.VerificarExtension(FUImagen.FileName) == true))
            {
                if (FUImagen.HasFile)
                {
                    SaveFile(FUImagen.PostedFile);
                    ImagenPlato.ImageUrl = "~/Presentacion/images/" + FUImagen.FileName;
                }
                platoModificar = actualizarDatos();
                //AQUI ES DONDE ACTUALIZA EN LA BD
                _error = NegocioMenu.ModificarPlato(platoModificar.IdPlato, platoModificar.NombrePlato, platoModificar.PrecioPlato, platoModificar.FotoPlato, platoModificar.DetallePlato, platoModificar.CompartirPlato, _switchActivo);
                LMensaje.Visible = false;
                desparcerLabels();
                if (_error != 0)
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "redirect script", //aca se coloca el codigo del error
                            "alert('El plato ha sido modificado satisfactoriamente'); location.href='API_menu_ModificarPlato.aspx';", true);
                else
                {
                    _mensajeError = LogicaDeNegocios.Menu.conexionBD._mensajeFinal;
                    if (_mensajeError == "")
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "redirect script", //aca se coloca el codigo del error
                               "alert('" + _mensajeError + "'); location.href='API_menu_CrearPlato.aspx';", true);
                    else
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "redirect script", //aca se coloca el codigo del error
                           "alert('Error al crear el plato, intente nuevamente'); location.href='API_menu_CrearPlato.aspx';", true);
                }
            }
            //Si exite algun campo vacio o llenado incorrectamente
            else
            {
                LMensaje.Visible = true;
                //primero valida el costo
                if (NegocioMenu.validarFloatCosto(this.TBCosto.Text) == false)
                {
                    desparcerLabels();
                    LMensaje.Text = "Costo debe ser numérico (*)";
                    LCosto.Visible = true;
                    buscarCamposVacios();

                }
                else
                    if (NegocioMenu.VerificarExtension(FUImagen.FileName) == false)
                    {
                        desparcerLabels();
                        this.LImagen.Visible = true;
                        LMensaje.Text = "error en la extension, solo se acepta gif, jpg, png (*)";
                        LMensaje.Visible = true;
                        buscarCamposVacios();
                    }
                    else
                    {
                        desparcerLabels();
                        LMensaje.Text = "Por Favor, completar campos vacios (*)";
                        buscarCamposVacios();

                    }

                if (FUImagen.FileName == "")
                {
                    this.cargarDatosFotos(API_menu_BuscarPlato.platoModificar.IdPlato);
                    platoModificar.FotoPlato = buscarFoto(API_menu_BuscarPlato.platoModificar.IdPlato);
                    if (_switchActivo == true)
                    {
                        this.InputValue = "checked";
                    }
                    else
                    {
                        this.InputValue = "";
                    }
                }
                else
                    this.cargarDatos(API_menu_BuscarPlato.platoModificar.IdPlato);
            }

        }

        protected void BCancelar_Click(object sender, EventArgs e)
        {
            Response.Redirect("~/Presentacion/API_menu_BuscarPlato.aspx");
        }




    }
}